package com.shbaiche.bifenba.util;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;

import com.google.gson.Gson;
import com.shbaiche.bifenba.App;
import com.shbaiche.bifenba.common.Constants;
import com.shbaiche.bifenba.model.base.Passport;
import com.shbaiche.bifenba.net.DecodeUtil;

import java.util.UUID;

/**
 * Created by Administrator on 2018/8/2 0002.
 */

public class SystemUtil {
    /**
     * <pre>
     * 得到一个Preference值
     * </pre>
     *
     * @param key
     * @return
     */
    public static int loadPreferenceInt(String key) {
        SharedPreferences mySharedPreference = App.getContext().getSharedPreferences(
                Constants.SharedPreferencesInfo.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        return mySharedPreference.getInt(key, 0);
    }

    /**
     * <pre>
     * 得到一个Preference值
     * </pre>
     *
     * @param key
     * @return
     */
    public static boolean loadPreferenceBol(String key) {
        SharedPreferences mySharedPreference = App.getContext().getSharedPreferences(
                Constants.SharedPreferencesInfo.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        return mySharedPreference.getBoolean(key, false);
    }

    /**
     * <pre>
     * 保存一个Preference键值对
     * </pre>
     *
     * @param key
     * @param value
     */
    public static void savePreference(String key, String value) {
        SharedPreferences mySharedPreference = App.getContext().getSharedPreferences(
                Constants.SharedPreferencesInfo.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        // 初始化一个SharedPreference类，为他设定名字和基本模式。
        SharedPreferences.Editor editor = mySharedPreference.edit();
        // 获得刚刚创建的sharedPreference的编辑器。
        editor.putString(key, value);
        // 利用editor为sharedPreference注入几组key/value对 。
        editor.commit();
        editor.clear();
        editor = null;
        // 保存到文件
    }

    /**
     * <pre>
     * 保存一个Preference键值对
     * </pre>
     *
     * @param key
     * @param value
     */
    public static void savePreference(String key, boolean value) {
        SharedPreferences mySharedPreference = App.getContext().getSharedPreferences(
                Constants.SharedPreferencesInfo.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        // 初始化一个SharedPreference类，为他设定名字和基本模式。
        SharedPreferences.Editor editor = mySharedPreference.edit();
        // 获得刚刚创建的sharedPreference的编辑器。
        editor.putBoolean(key, value);
        // 利用editor为sharedPreference注入几组key/value对 。
        editor.commit();
        editor.clear();
        editor = null;
        // 保存到文件
    }

    /**
     * <pre>
     * 保存一个Preference键值对
     * </pre>
     *
     * @param key
     * @param value
     */
    public static void savePreference(String key, int value) {
        SharedPreferences mySharedPreference = App.getContext().getSharedPreferences(
                Constants.SharedPreferencesInfo.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        // 初始化一个SharedPreference类，为他设定名字和基本模式。
        SharedPreferences.Editor editor = mySharedPreference.edit();
        // 获得刚刚创建的sharedPreference的编辑器。
        editor.putInt(key, value);
        // 利用editor为sharedPreference注入几组key/value对 。
        editor.commit();
        editor.clear();
        editor = null;
        // 保存到文件
    }

    /**
     * <pre>
     * 删除一个Preference键值对
     * </pre>
     *
     * @param key
     */
    public static void removePreference(String key) {
        SharedPreferences mySharedPreference = App.getContext().getSharedPreferences(
                Constants.SharedPreferencesInfo.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        // 初始化一个SharedPreference类，为他设定名字和基本模式。
        SharedPreferences.Editor editor = mySharedPreference.edit();
        // 获得刚刚创建的sharedPreference的编辑器。
        editor.remove(key);
        editor.commit();
        editor.clear();
        editor = null;
        // 保存到文件
    }

    /**
     * <pre>
     * 得到一个Preference值
     * </pre>
     *
     * @param key
     * @return
     */
    public static String loadPreference(String key) {
        SharedPreferences mySharedPreference = App.getContext().getSharedPreferences(
                Constants.SharedPreferencesInfo.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        return mySharedPreference.getString(key, "");
    }


    public static int getStatusBarHeight(){
        int statusBarHeight = -1;
        //获取status_bar_height资源的ID
        int resourceId = App.getContext().getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            //根据资源ID获取响应的尺寸值
            statusBarHeight = App.getContext().getResources().getDimensionPixelSize(resourceId);
        }

        if(statusBarHeight <= 0){
            try {
                Class<?> clazz = Class.forName("com.android.internal.R$dimen");
                Object object = clazz.newInstance();
                int height = Integer.parseInt(clazz.getField("status_bar_height")
                        .get(object).toString());
                statusBarHeight = App.getContext().getResources().getDimensionPixelSize(height);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return statusBarHeight;
    }

    /**
     * 生成设备唯一ID
     * @return
     */
    public static String getUniquePsuedoID() {
        String serial = null;
        String m_szDevIDShort = "35" +
                Build.BOARD.length()%10+ Build.BRAND.length()%10 +
                Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 +
                Build.DISPLAY.length()%10 + Build.HOST.length()%10 +
                Build.ID.length()%10 + Build.MANUFACTURER.length()%10 +
                Build.MODEL.length()%10 + Build.PRODUCT.length()%10 +
                Build.TAGS.length()%10 + Build.TYPE.length()%10 +
                Build.USER.length()%10 ; //13 位
        try {
            serial = android.os.Build.class.getField("SERIAL").get(null).toString();
            //API>=9 使用serial号
            return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
            //serial需要一个初始化
            serial = "serial"; // 随便一个初始化
        }
        //使用硬件信息拼凑出来的15位号码
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }


    /**
     * 获取当前登录用户名作为key（旧版本）
     * @return
     */
    public static String getPassportSeedOld(){
        String seed = Constants.KEY_PASSPORT;
        return seed;
    }

    /**
     * 获取当前登录用户名+设备唯一码组成的key
     * @return
     */
    public static String getPassportSeed(){
        String seed = Constants.KEY_PASSPORT;
        String id = getUniquePsuedoID();
        if(!StringUtil.isNullOrEmpty(id)){
            seed+="_"+id;
        }

        return seed;
    }

    /**
     * 存储passport数据到本地
     */
    public static void savePassport(Passport passport){
        if(passport!=null){
            String seed = getPassportSeed();
            Gson gson = new Gson();
            String json = gson.toJson(passport);

            SystemUtil.savePreference(Constants.SharedPreferencesInfo.LOGIN_PASSPORT_NEW,
                    DecodeUtil.encrypt(seed, json));
        }
    }

    /**
     * 清空本地存储的passport数据
     */
    public static void removePassport(){
        removePreference(Constants.SharedPreferencesInfo.LOGIN_PASSPORT);
        removePreference(Constants.SharedPreferencesInfo.LOGIN_PASSPORT_NEW);
    }

    /**
     * 获取本地存储的passport（兼容旧版本）
     * @return
     */
    public static  Passport getPassport(){
        String seed = getPassportSeed();
        String passprotDes = SystemUtil.loadPreference(Constants.SharedPreferencesInfo.LOGIN_PASSPORT_NEW);
        if(StringUtil.isNullOrEmpty(passprotDes)){
            //兼容旧的版本
            seed = getPassportSeedOld();
            passprotDes = SystemUtil.loadPreference(Constants.SharedPreferencesInfo.LOGIN_PASSPORT);
        }
        //LogUtil.e("test","== seed:"+seed);
        if(!StringUtil.isNullOrEmpty(passprotDes)){
            try{
                String json = DecodeUtil.decrypt(seed, passprotDes);
                if(json!=null){
                    Gson gson = new Gson();

                    Passport passport = gson.fromJson(json,Passport.class);
                    if(passport!=null){
                        return passport;
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return null;
    }



}
